package com.example.bbs.agent.lazy.dao;

import com.example.bbs.dao.BaseDao;

/**
 * author: VC
 * create: 2021/7/16 10:02
 * version: 1.0.0
 */
public class PostDaoImpl extends BaseDao {

//    public Post findById(int id) {
//        return (Post) super.find("select * from post p " +
//                        "inner join user u " +
//                        "on p.uid = u.id " +
//                        "where pid = ?",
//                rs -> {
//                    try {
//                        if (rs.next()) {
//                            int pid = rs.getInt("pid");
//                            String title = rs.getString("title");
//                            int uid = rs.getInt("uid");
//                            String name = rs.getString("name");
//                            String pwd = rs.getString("pwd");
//                            User user = new User(uid, name, pwd);
//                            return new Post(pid, title, user);
//                        }
//                    } catch (Exception exception) {
//                        exception.printStackTrace();
//                    }
//                    return null;
//                }, id);
//    }
//
//    public Post findById(int id) {
//        return (Post) super.find("select * from post p " +
//                        //"inner join user u " +
//                        //"on p.uid = u.id " +
//                        "where pid = ?",
//                rs -> {
//                    try {
//                        if (rs.next()) {
//                            int pid = rs.getInt("pid");
//                            String title = rs.getString("title");
//                            int uid = rs.getInt("uid");
//                            //String name = rs.getString("name");
//                            //String pwd = rs.getString("pwd");
//
//
//                            // User user = new User(uid, name, pwd);
//                            //创建代理对象
//                            User user = createByCglib(uid, User.class);
//
//                            return new Post(pid, title, user);
//                        }
//                    } catch (Exception exception) {
//                        exception.printStackTrace();
//                    }
//                    return null;
//                }, id);
//    }

//    private User createByCglib(int uid, Class<User> userClass) {
//        Enhancer enhancer = new Enhancer();
//        //设置父类
//        enhancer.setSuperclass(userClass);
//        //设置回调
//        enhancer.setCallback(new LazyUserHandler(new UserDaoImpl(), uid));
//        //创建代理对象
//        return (User) enhancer.create(new Class[]{int.class}, new Object[]{uid});
//    }

//    /**
//     * 处理懒加载用户的逻辑处理类
//     */
//    class LazyUserHandler implements MethodInterceptor {
//        private UserDao userDao;
//        private int uid;
//
//        LazyUserHandler(UserDao userDao, int uid) {
//            this.userDao = userDao;
//            this.uid = uid;
//        }
//
//        @Override
//        public Object intercept(Object proxy,
//                                Method method,
//                                Object[] objects,
//                                MethodProxy methodProxy) throws Throwable {
//            System.out.println("进入intercept");
//            //判断调用的方法
//            if (method.getName().startsWith("set")) {
//                return methodProxy.invokeSuper(proxy, objects);
//            }
//            if (method.getName().equals("getUid")) {
//                return methodProxy.invokeSuper(proxy, objects);
//            }
//            System.out.println("数据库查询用户信息");
//            //数据库查询用户信息
//            User user = userDao.findById(uid);
//            //调用真实对象的真实方法
//            return method.invoke(user, objects);
//        }
//    }
}
